/*
 * btny.c
 *
 *  Created on: 2012-04-17
 *      Author: falcon, Sebastian
 */


// TODO swiecenie ledow ma byc w funkcjach do teog przeznaczonych (sprawdz ledy.c ledy.h)
#include "btny.h"
#include "frame.h"

#define prawo 2
#define lewo 1

bool slave1=false, slave2=false, slave3=false;

__attribute__((__interrupt__)) void interruptJoystick(void){



    if(1 == gpio_get_pin_interrupt_flag(GPIO_JOYSTICK_PUSH))
	{
    	g_oIncomingFrame.u8_Start=!g_oIncomingFrame.u8_Start;
    	gpio_clear_pin_interrupt_flag(GPIO_JOYSTICK_PUSH);
	}

    if(1 == gpio_get_pin_interrupt_flag(GPIO_JOYSTICK_LEFT))
	{
    	g_oIncomingFrame.u8_Dir=lewo;
    	gpio_clear_pin_interrupt_flag(GPIO_JOYSTICK_LEFT);
	}

    if(1 == gpio_get_pin_interrupt_flag(GPIO_JOYSTICK_RIGHT))
	{
    	g_oIncomingFrame.u8_Dir=prawo;
    	gpio_clear_pin_interrupt_flag(GPIO_JOYSTICK_RIGHT);
	}

    if(1 == gpio_get_pin_interrupt_flag(GPIO_JOYSTICK_UP))
	{
    	g_oIncomingFrame.u8_Speed += 1000;
    	gpio_clear_pin_interrupt_flag(GPIO_JOYSTICK_UP);
	}

    if(1 == gpio_get_pin_interrupt_flag(GPIO_JOYSTICK_DOWN))
	{
    	g_oIncomingFrame.u8_Speed -= 1000;
    	gpio_clear_pin_interrupt_flag(GPIO_JOYSTICK_DOWN);
	}

    //wybor slava do wyslania
	if (gpio_get_pin_interrupt_flag(GPIO_PUSH_BUTTON_0))
	{  //(0== (PVR >>(88%32) & 0x01) )
		slave2=!slave2;
		gpio_clear_pin_interrupt_flag(GPIO_PUSH_BUTTON_0);
	}

	if (gpio_get_pin_interrupt_flag(GPIO_PUSH_BUTTON_1))
	{  //(0== (PVR >>(90%32) & 0x01) )
		slave2=!slave2;
		gpio_clear_pin_interrupt_flag(GPIO_PUSH_BUTTON_1);
	}

	if (gpio_get_pin_interrupt_flag(GPIO_PUSH_BUTTON_2))
	{  //(0== (PVR >>(96%32) & 0x01) )
		slave3=!slave3;
		gpio_clear_pin_interrupt_flag(GPIO_PUSH_BUTTON_2);
	}
}


void master_addres(void)
{
	bool slave1=false, slave2=false, slave3=false;

	if(slave1==true)
	{
		LED_On(LED0);
		g_oIncomingFrame.u8_Addr++;
	}
	else if(slave1==false)
	{
		LED_Off(LED0);
		--g_oIncomingFrame.u8_Addr;
	}

	if(slave2==true)
	{
		LED_On(LED1);
		g_oIncomingFrame.u8_Addr++;
	}
	else if(slave2==false)
	{
		LED_Off(LED1);
		--g_oIncomingFrame.u8_Addr;
	}

	if(slave3==true)
	{
		LED_On(LED2);
		g_oIncomingFrame.u8_Addr++;
	}
	else if(slave1==false)
	{
		LED_Off(LED2);
		--g_oIncomingFrame.u8_Addr;
	}
}

int button3SecPeriod() // tutaj jest rozpoczecie odliczania 3 sekund (trzymania)
{// TODO g_oFlags.u8_3secondStarted ustawiac ja przy wcisnieciu przycisku
	// z kolei przy puszczeniu przycisku zadbac o wylaczanie timera!!!! timerStop() postawic w innym miejscu OBLIGATORY!!
	if (g_oFlags.u8_3secondStarted) {
		timerStart(g_i32changeSM_timerID, 3000); // TODO

		g_oFlags.u8_3secondStarted = 0;
	}
	if (g_oFlags.u8_3secondPassed) { // ustawiane w przerwaniu od timera jak mina 3 sekundy!!!!!
									// funkcja changeSM jest zapisana w timerze jako schedule i uruchamiana jest po 3 sekundach
									// tutaj
		timerStop(g_i32changeSM_timerID);// TODO
		g_oFlags.u8_3secondPassed = 0;
	}

}
